import throttle from 'lodash/throttle'

class loadMoreClass {
  constructor() {
    this.settings = loadMoreClass.defaultOptions
    this.loadFn = throttle(this.loadMoreFn.bind(this), 500)
  }

  setOptions(options) {
    this.settings = options ? Object.assign({}, loadMoreClass.defaultOptions, options) : loadMoreClass.defaultOptions
    this.bindScroll()
  }

  bindScroll() {
    document.removeEventListener('scroll', this.loadFn, false)
    document.addEventListener('scroll', this.loadFn, false)
  }

  removeScroll() {
    document.removeEventListener('scroll', this.loadFn, false)
  }

  loadMoreFn() {
    const toLoadHeight = this.settings.toLoadHeight
    // 后期直接改成传高度就可以了。
    const rectHeight = this.settings.rectHeightDom.getBoundingClientRect().height
    if (Math.abs(rectHeight - window.scrollY) < toLoadHeight) {
      if (this.loadDownFn) {
        this.loadDownFn()
      }
    }
  }
  /**
   * 加载更多 逻辑判断是否满足条件
   */
  loadDownFn() {
    const params = this.settings
    if (params.pageCount && params.curPage && params.ajaxFN) {
      if (params.pageCount > params.curPage) {
        params.curPage++
        params.ajaxFN(params.curPage)
      }
    } else {
      console.warn(
        '_- -!___参数不全____，缺少必要参数params.pageCount && params.page && params.ajaxFN 或 params.page && params.dataPageNum && params.ajaxFN, > <你也可以请自行加判断逻辑啊（参数为addDomFn）'
      )
    }
  }
}

loadMoreClass.defaultOptions = {
  // 总页数,需要后端返回
  pageCount: '',
  // 当前页
  curPage: 1,
  // 加载时的调取接口，获取数据
  ajaxFN: '',
  // 离滚动点距离
  toLoadHeight: 150,
  // 要滚动区域,默认body
  rectHeightDom: document.body
}

export default new loadMoreClass()
